[INFO] fetching crate rat_memcache 0.2.8...
[INFO] testing rat_memcache-0.2.8 against master#1f7f8ea0721a3b1eb73e6c6d25cccb371434b320 for pr-154065-1
[INFO] extracting crate rat_memcache 0.2.8 into /workspace/builds/worker-2-tc1/source
[INFO] started tweaking crates.io crate rat_memcache 0.2.8
[INFO] removed 0 missing examples
[INFO] removed 0 missing tests
[INFO] finished tweaking crates.io crate rat_memcache 0.2.8
[INFO] tweaked toml for crates.io crate rat_memcache 0.2.8 written to /workspace/builds/worker-2-tc1/source/Cargo.toml
[INFO] validating manifest of crates.io crate rat_memcache 0.2.8 on toolchain 1f7f8ea0721a3b1eb73e6c6d25cccb371434b320
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1f7f8ea0721a3b1eb73e6c6d25cccb371434b320" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate crates.io crate rat_memcache 0.2.8 already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1f7f8ea0721a3b1eb73e6c6d25cccb371434b320" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded tokio-test v0.4.4
[INFO] [stderr]   Downloaded zstd v0.12.4
[INFO] [stderr]   Downloaded zstd-safe v6.0.6
[INFO] [stderr]   Downloaded bitflags v2.9.2
[INFO] [stderr]   Downloaded plotters-backend v0.3.7
[INFO] [stderr]   Downloaded shared-local-state v0.1.4
[INFO] [stderr]   Downloaded fault-injection v1.0.10
[INFO] [stderr]   Downloaded anstream v0.6.20
[INFO] [stderr]   Downloaded concurrent-map v5.0.37
[INFO] [stderr]   Downloaded clap v4.5.45
[INFO] [stderr]   Downloaded lz4_flex v0.11.5
[INFO] [stderr]   Downloaded cc v1.2.33
[INFO] [stderr]   Downloaded melange_db v0.2.8
[INFO] [stderr]   Downloaded criterion-plot v0.5.0
[INFO] [stderr]   Downloaded rat_logger v0.3.2
[INFO] [stderr]   Downloaded inline-array v0.1.14
[INFO] [stderr]   Downloaded criterion v0.5.1
[INFO] [stderr]   Downloaded stack-map v1.0.5
[INFO] [stderr]   Downloaded plotters v0.3.7
[INFO] [stderr]   Downloaded clap_builder v4.5.44
[INFO] [stderr]   Downloaded pagetable v0.4.6
[INFO] [stderr]   Downloaded libmimalloc-sys v0.1.44
[INFO] [stderr]   Downloaded remove_dir_all v0.5.3
[INFO] [stderr]   Downloaded plotters-svg v0.3.7
[INFO] [stderr]   Downloaded cache-advisor v1.0.16
[INFO] [stderr]   Downloaded ebr v0.2.13
[INFO] [stderr]   Downloaded tempdir v0.3.7
[INFO] [stderr]   Downloaded mimalloc v0.1.48
[INFO] [stderr]   Downloaded zstd-sys v2.0.15+zstd.1.5.7
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+1f7f8ea0721a3b1eb73e6c6d25cccb371434b320" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 0b9c43a243d5a17f57dc1dd179569a7b2ea4f17f862dbb3d216be5ea7ae8a3af
[INFO] running `Command { std: "docker" "start" "-a" "0b9c43a243d5a17f57dc1dd179569a7b2ea4f17f862dbb3d216be5ea7ae8a3af", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "0b9c43a243d5a17f57dc1dd179569a7b2ea4f17f862dbb3d216be5ea7ae8a3af", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "0b9c43a243d5a17f57dc1dd179569a7b2ea4f17f862dbb3d216be5ea7ae8a3af", kill_on_drop: false }`
[INFO] [stdout] 0b9c43a243d5a17f57dc1dd179569a7b2ea4f17f862dbb3d216be5ea7ae8a3af
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+1f7f8ea0721a3b1eb73e6c6d25cccb371434b320" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 383e8564d1fd729ee888d161418c29987f69d46a347bd9e0ee2a72522156c77d
[INFO] running `Command { std: "docker" "start" "-a" "383e8564d1fd729ee888d161418c29987f69d46a347bd9e0ee2a72522156c77d", kill_on_drop: false }`
[INFO] [stderr]    Compiling libc v0.2.175
[INFO] [stderr]    Compiling unicode-ident v1.0.18
[INFO] [stderr]    Compiling cfg-if v1.0.1
[INFO] [stderr]    Compiling crossbeam-utils v0.8.21
[INFO] [stderr]    Compiling serde v1.0.219
[INFO] [stderr]    Compiling parking_lot_core v0.9.11
[INFO] [stderr]    Compiling smallvec v1.15.1
[INFO] [stderr]    Compiling shlex v1.3.0
[INFO] [stderr]    Compiling zerocopy v0.8.26
[INFO] [stderr]    Compiling futures-sink v0.3.31
[INFO] [stderr]    Compiling rayon-core v1.13.0
[INFO] [stderr]    Compiling futures-core v0.3.31
[INFO] [stderr]    Compiling lock_api v0.4.13
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling futures-task v0.3.31
[INFO] [stderr]    Compiling futures-io v0.3.31
[INFO] [stderr]    Compiling proc-macro2 v1.0.101
[INFO] [stderr]    Compiling memchr v2.7.5
[INFO] [stderr]    Compiling slab v0.4.11
[INFO] [stderr]    Compiling pin-utils v0.1.0
[INFO] [stderr]    Compiling futures-channel v0.3.31
[INFO] [stderr]    Compiling cc v1.2.33
[INFO] [stderr]    Compiling is_terminal_polyfill v1.70.1
[INFO] [stderr]    Compiling hashbrown v0.14.5
[INFO] [stderr]    Compiling virtue v0.0.18
[INFO] [stderr]    Compiling either v1.15.0
[INFO] [stderr]    Compiling anstyle v1.0.11
[INFO] [stderr]    Compiling getrandom v0.3.3
[INFO] [stderr]    Compiling anstyle-query v1.1.4
[INFO] [stderr]    Compiling hashbrown v0.15.5
[INFO] [stderr]    Compiling rustix v1.0.8
[INFO] [stderr]    Compiling quote v1.0.40
[INFO] [stderr]    Compiling anstream v0.6.20
[INFO] [stderr]    Compiling syn v2.0.106
[INFO] [stderr]    Compiling unty v0.0.4
[INFO] [stderr]    Compiling winnow v0.7.12
[INFO] [stderr]    Compiling anyhow v1.0.99
[INFO] [stderr]    Compiling linux-raw-sys v0.9.4
[INFO] [stderr]    Compiling clap_lex v0.7.5
[INFO] [stderr]    Compiling iana-time-zone v0.1.63
[INFO] [stderr]    Compiling bitflags v2.9.2
[INFO] [stderr]    Compiling bytes v1.10.1
[INFO] [stderr]    Compiling crossbeam-epoch v0.9.18
[INFO] [stderr]    Compiling crossbeam-queue v0.3.12
[INFO] [stderr]    Compiling crossbeam-channel v0.5.15
[INFO] [stderr]    Compiling clap_builder v4.5.44
[INFO] [stderr]    Compiling arc-swap v1.7.1
[INFO] [stderr]    Compiling crossbeam-deque v0.8.6
[INFO] [stderr]    Compiling getrandom v0.2.16
[INFO] [stderr]    Compiling indexmap v2.10.0
[INFO] [stderr]    Compiling bincode_derive v2.0.1
[INFO] [stderr]    Compiling mio v1.0.4
[INFO] [stderr]    Compiling num_cpus v1.17.0
[INFO] [stderr]    Compiling socket2 v0.6.0
[INFO] [stderr]    Compiling rand_core v0.6.4
[INFO] [stderr]    Compiling parking_lot v0.12.4
[INFO] [stderr]    Compiling signal-hook-registry v1.4.6
[INFO] [stderr]    Compiling threadpool v1.8.1
[INFO] [stderr]    Compiling crossbeam v0.8.4
[INFO] [stderr]    Compiling dashmap v6.1.0
[INFO] [stderr]    Compiling fxhash v0.2.1
[INFO] [stderr]    Compiling lz4-sys v1.11.1+lz4-1.10.0
[INFO] [stderr]    Compiling rayon v1.11.0
[INFO] [stderr]    Compiling dashmap v5.5.3
[INFO] [stderr]    Compiling ppv-lite86 v0.2.21
[INFO] [stderr]    Compiling clap v4.5.45
[INFO] [stderr]    Compiling rand_chacha v0.3.1
[INFO] [stderr]    Compiling rand v0.8.5
[INFO] [stderr]    Compiling serde_derive v1.0.219
[INFO] [stderr]    Compiling futures-macro v0.3.31
[INFO] [stderr]    Compiling tokio-macros v2.5.0
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling async-trait v0.1.89
[INFO] [stderr]    Compiling tempfile v3.20.0
[INFO] [stderr]    Compiling tokio v1.47.1
[INFO] [stderr]    Compiling sysinfo v0.30.13
[INFO] [stderr]    Compiling futures-util v0.3.31
[INFO] [stderr]    Compiling thiserror v1.0.69
[INFO] [stderr]    Compiling futures-executor v0.3.31
[INFO] [stderr]    Compiling futures v0.3.31
[INFO] [stderr]    Compiling toml_datetime v0.6.11
[INFO] [stderr]    Compiling serde_spanned v0.6.9
[INFO] [stderr]    Compiling bincode v2.0.1
[INFO] [stderr]    Compiling chrono v0.4.41
[INFO] [stderr]    Compiling toml_edit v0.22.27
[INFO] [stderr]    Compiling toml v0.8.23
[INFO] [stderr]    Compiling lz4 v1.28.1
[INFO] [stderr]    Compiling rat_logger v0.3.2
[INFO] [stderr]    Compiling rat_memcache v0.2.8 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `CacheError`
[INFO] [stdout]  --> src/cache.rs:8:20
[INFO] [stdout]   |
[INFO] [stdout] 8 | use crate::error::{CacheError, CacheResult};
[INFO] [stdout]   |                    ^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `CacheLayer` and `CacheOperation`
[INFO] [stdout]   --> src/cache.rs:13:20
[INFO] [stdout]    |
[INFO] [stdout] 13 | use crate::types::{CacheLayer, CacheOperation};
[INFO] [stdout]    |                    ^^^^^^^^^^  ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::cache_log`
[INFO] [stdout]   --> src/cache.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | use crate::cache_log;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `interval`
[INFO] [stdout]   --> src/cache.rs:19:19
[INFO] [stdout]    |
[INFO] [stdout] 19 | use tokio::time::{interval, Duration};
[INFO] [stdout]    |                   ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `chrono`
[INFO] [stdout]  --> src/types.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use chrono;
[INFO] [stdout]   |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::Write`
[INFO] [stdout]   --> src/logging.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | use std::io::Write;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `chrono::Local`
[INFO] [stdout]   --> src/logging.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | use chrono::Local;
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Level`
[INFO] [stdout]   --> src/logging.rs:20:33
[INFO] [stdout]    |
[INFO] [stdout] 20 | use rat_logger::{LoggerBuilder, Level, LevelFilter, Logger};
[INFO] [stdout]    |                                 ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Metadata` and `Record`
[INFO] [stdout]   --> src/logging.rs:21:26
[INFO] [stdout]    |
[INFO] [stdout] 21 | use rat_logger::config::{Record, Metadata};
[INFO] [stdout]    |                          ^^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rat_logger::handler::term::TermConfig`
[INFO] [stdout]   --> src/logging.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 | use rat_logger::handler::term::TermConfig;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ColorConfig`, `FormatConfig`, and `LevelStyle`
[INFO] [stdout]   --> src/logging.rs:23:18
[INFO] [stdout]    |
[INFO] [stdout] 23 | use rat_logger::{FormatConfig, LevelStyle, ColorConfig};
[INFO] [stdout]    |                  ^^^^^^^^^^^^  ^^^^^^^^^^  ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `CacheLayer` and `CacheOperation`
[INFO] [stdout]  --> src/l1_cache.rs:9:50
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::types::{CacheValue, EvictionStrategy, CacheLayer, CacheOperation};
[INFO] [stdout]   |                                                  ^^^^^^^^^^  ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `CacheError`
[INFO] [stdout]  --> src/ttl.rs:6:20
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::error::{CacheError, CacheResult};
[INFO] [stdout]   |                    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `rat_logger::LoggerBuilder::init`: 请使用init_global_logger方法
[INFO] [stdout]    --> src/logging.rs:139:17
[INFO] [stdout]     |
[INFO] [stdout] 139 |         builder.init().map_err(|e| {
[INFO] [stdout]     |                 ^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(deprecated)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `l2_cache`
[INFO] [stdout]    --> src/cache.rs:225:13
[INFO] [stdout]     |
[INFO] [stdout] 225 |         let l2_cache: Option<()> = None;
[INFO] [stdout]     |             ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_l2_cache`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `start_time`
[INFO] [stdout]    --> src/cache.rs:253:13
[INFO] [stdout]     |
[INFO] [stdout] 253 |         let start_time = Instant::now();
[INFO] [stdout]     |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_start_time`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `start_time`
[INFO] [stdout]    --> src/l1_cache.rs:158:13
[INFO] [stdout]     |
[INFO] [stdout] 158 |         let start_time = Instant::now();
[INFO] [stdout]     |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_start_time`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `start_time`
[INFO] [stdout]   --> src/l1_cache.rs:91:13
[INFO] [stdout]    |
[INFO] [stdout] 91 |         let start_time = Instant::now();
[INFO] [stdout]    |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_start_time`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `start_time`
[INFO] [stdout]    --> src/cache.rs:309:13
[INFO] [stdout]     |
[INFO] [stdout] 309 |         let start_time = Instant::now();
[INFO] [stdout]     |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_start_time`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `start_time`
[INFO] [stdout]    --> src/l1_cache.rs:117:13
[INFO] [stdout]     |
[INFO] [stdout] 117 |         let start_time = Instant::now();
[INFO] [stdout]     |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_start_time`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `start_time`
[INFO] [stdout]    --> src/cache.rs:387:13
[INFO] [stdout]     |
[INFO] [stdout] 387 |         let start_time = Instant::now();
[INFO] [stdout]     |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_start_time`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `start_time`
[INFO] [stdout]    --> src/cache.rs:394:13
[INFO] [stdout]     |
[INFO] [stdout] 394 |         let start_time = Instant::now();
[INFO] [stdout]     |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_start_time`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `PendingSetOperation` is more private than the item `StreamingParser::check_set_complete`
[INFO] [stdout]    --> src/streaming_protocol.rs:120:5
[INFO] [stdout]     |
[INFO] [stdout] 120 |     pub fn check_set_complete(&mut self, key: &str) -> Option<(PendingSetOperation, Vec<u8>)> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ method `StreamingParser::check_set_complete` is reachable at visibility `pub`
[INFO] [stdout]     |
[INFO] [stdout] note: but type `PendingSetOperation` is only usable at visibility `pub(self)`
[INFO] [stdout]    --> src/streaming_protocol.rs:44:1
[INFO] [stdout]     |
[INFO] [stdout]  44 | struct PendingSetOperation {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: `#[warn(private_interfaces)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `total_memory` is never read
[INFO] [stdout]    --> src/config.rs:509:5
[INFO] [stdout]     |
[INFO] [stdout] 508 | struct SystemInfo {
[INFO] [stdout]     |        ---------- field in this struct
[INFO] [stdout] 509 |     total_memory: u64,
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `recommended_l1_memory` and `recommended_worker_threads` are never used
[INFO] [stdout]    --> src/config.rs:528:8
[INFO] [stdout]     |
[INFO] [stdout] 514 | impl SystemInfo {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 528 |     fn recommended_l1_memory(&self) -> usize {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 535 |     fn recommended_worker_threads(&self) -> usize {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PathUtils` is never constructed
[INFO] [stdout]    --> src/config.rs:542:8
[INFO] [stdout]     |
[INFO] [stdout] 542 | struct PathUtils;
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `default_cache_dir` and `validate_writable_path` are never used
[INFO] [stdout]    --> src/config.rs:546:8
[INFO] [stdout]     |
[INFO] [stdout] 544 | impl PathUtils {
[INFO] [stdout]     | -------------- associated functions in this implementation
[INFO] [stdout] 545 |     /// 获取跨平台的默认缓存目录
[INFO] [stdout] 546 |     fn default_cache_dir() -> CacheResult<PathBuf> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 570 |     fn validate_writable_path(path: &PathBuf) -> CacheResult<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `total_size`, `flags`, and `exptime` are never read
[INFO] [stdout]   --> src/streaming_protocol.rs:45:5
[INFO] [stdout]    |
[INFO] [stdout] 44 | struct PendingSetOperation {
[INFO] [stdout]    |        ------------------- fields in this struct
[INFO] [stdout] 45 |     total_size: usize,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 46 |     chunk_count: usize,
[INFO] [stdout] 47 |     flags: u32,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 48 |     exptime: u32,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PendingSetOperation` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `l2_config` is never read
[INFO] [stdout]   --> src/compression.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub struct Compressor {
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] 15 |     l2_config: Arc<L2Config>,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Compressor` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CompressionResult` is never constructed
[INFO] [stdout]   --> src/compression.rs:20:12
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub struct CompressionResult {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DecompressionResult` is never constructed
[INFO] [stdout]   --> src/compression.rs:35:12
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub struct DecompressionResult {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/compression.rs:85:12
[INFO] [stdout]     |
[INFO] [stdout]  42 | impl Compressor {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  85 |     pub fn compress(&self, data: &[u8]) -> CacheResult<CompressionResult> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 127 |     pub fn decompress(&self, compressed_data: &[u8], is_compressed: bool) -> CacheResult<DecompressionResult> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 147 |     fn should_compress(&self, data: &[u8]) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 167 |     fn estimate_compressibility(&self, data: &[u8]) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 194 |     fn compress_lz4(&self, data: &[u8]) -> CacheResult<Vec<u8>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 210 |     fn decompress_lz4(&self, compressed_data: &[u8]) -> CacheResult<Vec<u8>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 222 |     pub fn config(&self) -> &L2Config {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 227 |     pub fn estimate_compressed_size(&self, original_size: usize) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CompressionStats` is never constructed
[INFO] [stdout]    --> src/compression.rs:247:12
[INFO] [stdout]     |
[INFO] [stdout] 247 | pub struct CompressionStats {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/compression.rs:266:12
[INFO] [stdout]     |
[INFO] [stdout] 264 | impl CompressionStats {
[INFO] [stdout]     | --------------------- associated items in this implementation
[INFO] [stdout] 265 |     /// 创建新的统计信息
[INFO] [stdout] 266 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 271 |     pub fn record_compression(&mut self, result: &CompressionResult) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 284 |     pub fn record_decompression(&mut self, _size: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 289 |     pub fn record_compression_failure(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 294 |     pub fn record_decompression_failure(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 299 |     pub fn overall_compression_ratio(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 307 |     pub fn bytes_saved(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 316 |     pub fn compression_success_rate(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 325 |     pub fn decompression_success_rate(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 334 |     pub fn reset(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `compressor` is never read
[INFO] [stdout]   --> src/l1_cache.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub struct L1Cache {
[INFO] [stdout]    |            ------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 30 |     compressor: Arc<Compressor>,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `L1Cache` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `len` and `is_empty` are never used
[INFO] [stdout]    --> src/l1_cache.rs:216:12
[INFO] [stdout]     |
[INFO] [stdout]  61 | impl L1Cache {
[INFO] [stdout]     | ------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 216 |     pub fn len(&self) -> usize {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 221 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `key` and `expire_time` are never read
[INFO] [stdout]   --> src/ttl.rs:34:14
[INFO] [stdout]    |
[INFO] [stdout] 34 |     AddKey { key: String, expire_time: u64 },
[INFO] [stdout]    |     ------   ^^^          ^^^^^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     fields in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CleanupCommand` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `key` is never read
[INFO] [stdout]   --> src/ttl.rs:36:17
[INFO] [stdout]    |
[INFO] [stdout] 36 |     RemoveKey { key: String },
[INFO] [stdout]    |     ---------   ^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CleanupCommand` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `UpdateKey` and `ForceCleanup` are never constructed
[INFO] [stdout]   --> src/ttl.rs:38:5
[INFO] [stdout]    |
[INFO] [stdout] 32 | enum CleanupCommand {
[INFO] [stdout]    |      -------------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 38 |     UpdateKey { key: String, expire_time: u64 },
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 39 |     /// 强制清理过期键
[INFO] [stdout] 40 |     ForceCleanup,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CleanupCommand` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `update_key`, `force_cleanup`, `get_stats`, `reset_stats`, and `stop` are never used
[INFO] [stdout]    --> src/ttl.rs:134:18
[INFO] [stdout]     |
[INFO] [stdout]  62 | impl TtlManager {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 134 |     pub async fn update_key(&self, key: String, ttl_seconds: Option<u64>) -> CacheResult<u64> {
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 210 |     pub async fn force_cleanup(&self) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 217 |     pub async fn get_stats(&self) -> TtlStats {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 229 |     pub async fn reset_stats(&self) {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 236 |     pub async fn stop(&self) {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_expire_time` is never used
[INFO] [stdout]    --> src/ttl.rs:433:12
[INFO] [stdout]     |
[INFO] [stdout] 433 |     pub fn calculate_expire_time(ttl_seconds: u64) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_valid_expire_time` is never used
[INFO] [stdout]    --> src/ttl.rs:438:12
[INFO] [stdout]     |
[INFO] [stdout] 438 |     pub fn is_valid_expire_time(expire_time: u64) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `format_remaining_time` is never used
[INFO] [stdout]    --> src/ttl.rs:443:12
[INFO] [stdout]     |
[INFO] [stdout] 443 |     pub fn format_remaining_time(ttl_seconds: u64) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 53.57s
[INFO] running `Command { std: "docker" "inspect" "383e8564d1fd729ee888d161418c29987f69d46a347bd9e0ee2a72522156c77d", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "383e8564d1fd729ee888d161418c29987f69d46a347bd9e0ee2a72522156c77d", kill_on_drop: false }`
[INFO] [stdout] 383e8564d1fd729ee888d161418c29987f69d46a347bd9e0ee2a72522156c77d
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+1f7f8ea0721a3b1eb73e6c6d25cccb371434b320" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 2d9d856a61a731cef1b204ef8500fc107c9b117b70c0e7b01f443c314f8d611d
[INFO] running `Command { std: "docker" "start" "-a" "2d9d856a61a731cef1b204ef8500fc107c9b117b70c0e7b01f443c314f8d611d", kill_on_drop: false }`
[INFO] [stderr]    Compiling futures-core v0.3.31
[INFO] [stderr]    Compiling rayon v1.11.0
[INFO] [stderr]    Compiling tokio v1.47.1
[INFO] [stderr]    Compiling serde_json v1.0.142
[INFO] [stderr]    Compiling half v2.6.0
[INFO] [stderr]    Compiling itoa v1.0.15
[INFO] [stderr]    Compiling plotters-backend v0.3.7
[INFO] [stderr]    Compiling ciborium-io v0.2.2
[INFO] [stderr]    Compiling regex-syntax v0.8.5
[INFO] [stderr]    Compiling ryu v1.0.20
[INFO] [stderr]    Compiling chrono v0.4.41
[INFO] [stderr]    Compiling itertools v0.10.5
[INFO] [stderr]    Compiling async-stream-impl v0.3.6
[INFO] [stderr]    Compiling cast v0.3.0
[INFO] [stderr]    Compiling is-terminal v0.4.16
[INFO] [stderr]    Compiling anes v0.1.6
[INFO] [stderr]    Compiling futures-channel v0.3.31
[INFO] [stderr]    Compiling oorandom v11.1.5
[INFO] [stderr]    Compiling ciborium-ll v0.2.2
[INFO] [stderr]    Compiling ciborium v0.2.2
[INFO] [stderr]    Compiling plotters-svg v0.3.7
[INFO] [stderr]    Compiling plotters v0.3.7
[INFO] [stderr]    Compiling futures-util v0.3.31
[INFO] [stderr]    Compiling async-stream v0.3.6
[INFO] [stderr]    Compiling tinytemplate v1.2.1
[INFO] [stderr]    Compiling regex-automata v0.4.9
[INFO] [stderr]    Compiling criterion-plot v0.5.0
[INFO] [stderr]    Compiling regex v1.11.1
[INFO] [stderr]    Compiling sysinfo v0.30.13
[INFO] [stderr]    Compiling criterion v0.5.1
[INFO] [stderr]    Compiling futures-executor v0.3.31
[INFO] [stderr]    Compiling futures v0.3.31
[INFO] [stderr]    Compiling tokio-stream v0.1.17
[INFO] [stderr]    Compiling rat_logger v0.3.2
[INFO] [stderr]    Compiling tokio-test v0.4.4
[INFO] [stderr]    Compiling rat_memcache v0.2.8 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `CacheError`
[INFO] [stdout]  --> src/cache.rs:8:20
[INFO] [stdout]   |
[INFO] [stdout] 8 | use crate::error::{CacheError, CacheResult};
[INFO] [stdout]   |                    ^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `CacheLayer` and `CacheOperation`
[INFO] [stdout]   --> src/cache.rs:13:20
[INFO] [stdout]    |
[INFO] [stdout] 13 | use crate::types::{CacheLayer, CacheOperation};
[INFO] [stdout]    |                    ^^^^^^^^^^  ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::cache_log`
[INFO] [stdout]   --> src/cache.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | use crate::cache_log;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `interval`
[INFO] [stdout]   --> src/cache.rs:19:19
[INFO] [stdout]    |
[INFO] [stdout] 19 | use tokio::time::{interval, Duration};
[INFO] [stdout]    |                   ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `chrono`
[INFO] [stdout]  --> src/types.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use chrono;
[INFO] [stdout]   |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::Write`
[INFO] [stdout]   --> src/logging.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | use std::io::Write;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `chrono::Local`
[INFO] [stdout]   --> src/logging.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | use chrono::Local;
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Level`
[INFO] [stdout]   --> src/logging.rs:20:33
[INFO] [stdout]    |
[INFO] [stdout] 20 | use rat_logger::{LoggerBuilder, Level, LevelFilter, Logger};
[INFO] [stdout]    |                                 ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Metadata` and `Record`
[INFO] [stdout]   --> src/logging.rs:21:26
[INFO] [stdout]    |
[INFO] [stdout] 21 | use rat_logger::config::{Record, Metadata};
[INFO] [stdout]    |                          ^^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rat_logger::handler::term::TermConfig`
[INFO] [stdout]   --> src/logging.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 | use rat_logger::handler::term::TermConfig;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ColorConfig`, `FormatConfig`, and `LevelStyle`
[INFO] [stdout]   --> src/logging.rs:23:18
[INFO] [stdout]    |
[INFO] [stdout] 23 | use rat_logger::{FormatConfig, LevelStyle, ColorConfig};
[INFO] [stdout]    |                  ^^^^^^^^^^^^  ^^^^^^^^^^  ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `CacheLayer` and `CacheOperation`
[INFO] [stdout]  --> src/l1_cache.rs:9:50
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::types::{CacheValue, EvictionStrategy, CacheLayer, CacheOperation};
[INFO] [stdout]   |                                                  ^^^^^^^^^^  ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `CacheError`
[INFO] [stdout]  --> src/ttl.rs:6:20
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::error::{CacheError, CacheResult};
[INFO] [stdout]   |                    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `rat_logger::LoggerBuilder::init`: 请使用init_global_logger方法
[INFO] [stdout]    --> src/logging.rs:139:17
[INFO] [stdout]     |
[INFO] [stdout] 139 |         builder.init().map_err(|e| {
[INFO] [stdout]     |                 ^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(deprecated)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `l2_cache`
[INFO] [stdout]    --> src/cache.rs:225:13
[INFO] [stdout]     |
[INFO] [stdout] 225 |         let l2_cache: Option<()> = None;
[INFO] [stdout]     |             ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_l2_cache`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `start_time`
[INFO] [stdout]    --> src/cache.rs:253:13
[INFO] [stdout]     |
[INFO] [stdout] 253 |         let start_time = Instant::now();
[INFO] [stdout]     |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_start_time`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `start_time`
[INFO] [stdout]    --> src/l1_cache.rs:158:13
[INFO] [stdout]     |
[INFO] [stdout] 158 |         let start_time = Instant::now();
[INFO] [stdout]     |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_start_time`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `start_time`
[INFO] [stdout]   --> src/l1_cache.rs:91:13
[INFO] [stdout]    |
[INFO] [stdout] 91 |         let start_time = Instant::now();
[INFO] [stdout]    |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_start_time`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `start_time`
[INFO] [stdout]    --> src/cache.rs:309:13
[INFO] [stdout]     |
[INFO] [stdout] 309 |         let start_time = Instant::now();
[INFO] [stdout]     |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_start_time`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `start_time`
[INFO] [stdout]    --> src/l1_cache.rs:117:13
[INFO] [stdout]     |
[INFO] [stdout] 117 |         let start_time = Instant::now();
[INFO] [stdout]     |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_start_time`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `start_time`
[INFO] [stdout]    --> src/cache.rs:387:13
[INFO] [stdout]     |
[INFO] [stdout] 387 |         let start_time = Instant::now();
[INFO] [stdout]     |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_start_time`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `start_time`
[INFO] [stdout]    --> src/cache.rs:394:13
[INFO] [stdout]     |
[INFO] [stdout] 394 |         let start_time = Instant::now();
[INFO] [stdout]     |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_start_time`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `PendingSetOperation` is more private than the item `StreamingParser::check_set_complete`
[INFO] [stdout]    --> src/streaming_protocol.rs:120:5
[INFO] [stdout]     |
[INFO] [stdout] 120 |     pub fn check_set_complete(&mut self, key: &str) -> Option<(PendingSetOperation, Vec<u8>)> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ method `StreamingParser::check_set_complete` is reachable at visibility `pub`
[INFO] [stdout]     |
[INFO] [stdout] note: but type `PendingSetOperation` is only usable at visibility `pub(self)`
[INFO] [stdout]    --> src/streaming_protocol.rs:44:1
[INFO] [stdout]     |
[INFO] [stdout]  44 | struct PendingSetOperation {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: `#[warn(private_interfaces)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `total_memory` is never read
[INFO] [stdout]    --> src/config.rs:509:5
[INFO] [stdout]     |
[INFO] [stdout] 508 | struct SystemInfo {
[INFO] [stdout]     |        ---------- field in this struct
[INFO] [stdout] 509 |     total_memory: u64,
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `recommended_l1_memory` and `recommended_worker_threads` are never used
[INFO] [stdout]    --> src/config.rs:528:8
[INFO] [stdout]     |
[INFO] [stdout] 514 | impl SystemInfo {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 528 |     fn recommended_l1_memory(&self) -> usize {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 535 |     fn recommended_worker_threads(&self) -> usize {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PathUtils` is never constructed
[INFO] [stdout]    --> src/config.rs:542:8
[INFO] [stdout]     |
[INFO] [stdout] 542 | struct PathUtils;
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `default_cache_dir` and `validate_writable_path` are never used
[INFO] [stdout]    --> src/config.rs:546:8
[INFO] [stdout]     |
[INFO] [stdout] 544 | impl PathUtils {
[INFO] [stdout]     | -------------- associated functions in this implementation
[INFO] [stdout] 545 |     /// 获取跨平台的默认缓存目录
[INFO] [stdout] 546 |     fn default_cache_dir() -> CacheResult<PathBuf> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 570 |     fn validate_writable_path(path: &PathBuf) -> CacheResult<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `total_size`, `flags`, and `exptime` are never read
[INFO] [stdout]   --> src/streaming_protocol.rs:45:5
[INFO] [stdout]    |
[INFO] [stdout] 44 | struct PendingSetOperation {
[INFO] [stdout]    |        ------------------- fields in this struct
[INFO] [stdout] 45 |     total_size: usize,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 46 |     chunk_count: usize,
[INFO] [stdout] 47 |     flags: u32,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 48 |     exptime: u32,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PendingSetOperation` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `l2_config` is never read
[INFO] [stdout]   --> src/compression.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | pub struct Compressor {
[INFO] [stdout]    |            ---------- field in this struct
[INFO] [stdout] 15 |     l2_config: Arc<L2Config>,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Compressor` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CompressionResult` is never constructed
[INFO] [stdout]   --> src/compression.rs:20:12
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub struct CompressionResult {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `DecompressionResult` is never constructed
[INFO] [stdout]   --> src/compression.rs:35:12
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub struct DecompressionResult {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/compression.rs:85:12
[INFO] [stdout]     |
[INFO] [stdout]  42 | impl Compressor {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  85 |     pub fn compress(&self, data: &[u8]) -> CacheResult<CompressionResult> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 127 |     pub fn decompress(&self, compressed_data: &[u8], is_compressed: bool) -> CacheResult<DecompressionResult> {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 147 |     fn should_compress(&self, data: &[u8]) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 167 |     fn estimate_compressibility(&self, data: &[u8]) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 194 |     fn compress_lz4(&self, data: &[u8]) -> CacheResult<Vec<u8>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 210 |     fn decompress_lz4(&self, compressed_data: &[u8]) -> CacheResult<Vec<u8>> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 222 |     pub fn config(&self) -> &L2Config {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 227 |     pub fn estimate_compressed_size(&self, original_size: usize) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `CompressionStats` is never constructed
[INFO] [stdout]    --> src/compression.rs:247:12
[INFO] [stdout]     |
[INFO] [stdout] 247 | pub struct CompressionStats {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/compression.rs:266:12
[INFO] [stdout]     |
[INFO] [stdout] 264 | impl CompressionStats {
[INFO] [stdout]     | --------------------- associated items in this implementation
[INFO] [stdout] 265 |     /// 创建新的统计信息
[INFO] [stdout] 266 |     pub fn new() -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 271 |     pub fn record_compression(&mut self, result: &CompressionResult) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 284 |     pub fn record_decompression(&mut self, _size: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 289 |     pub fn record_compression_failure(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 294 |     pub fn record_decompression_failure(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 299 |     pub fn overall_compression_ratio(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 307 |     pub fn bytes_saved(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 316 |     pub fn compression_success_rate(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 325 |     pub fn decompression_success_rate(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 334 |     pub fn reset(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `compressor` is never read
[INFO] [stdout]   --> src/l1_cache.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub struct L1Cache {
[INFO] [stdout]    |            ------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 30 |     compressor: Arc<Compressor>,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `L1Cache` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `len` and `is_empty` are never used
[INFO] [stdout]    --> src/l1_cache.rs:216:12
[INFO] [stdout]     |
[INFO] [stdout]  61 | impl L1Cache {
[INFO] [stdout]     | ------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 216 |     pub fn len(&self) -> usize {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 221 |     pub fn is_empty(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `key` and `expire_time` are never read
[INFO] [stdout]   --> src/ttl.rs:34:14
[INFO] [stdout]    |
[INFO] [stdout] 34 |     AddKey { key: String, expire_time: u64 },
[INFO] [stdout]    |     ------   ^^^          ^^^^^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     fields in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CleanupCommand` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `key` is never read
[INFO] [stdout]   --> src/ttl.rs:36:17
[INFO] [stdout]    |
[INFO] [stdout] 36 |     RemoveKey { key: String },
[INFO] [stdout]    |     ---------   ^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CleanupCommand` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `UpdateKey` and `ForceCleanup` are never constructed
[INFO] [stdout]   --> src/ttl.rs:38:5
[INFO] [stdout]    |
[INFO] [stdout] 32 | enum CleanupCommand {
[INFO] [stdout]    |      -------------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 38 |     UpdateKey { key: String, expire_time: u64 },
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 39 |     /// 强制清理过期键
[INFO] [stdout] 40 |     ForceCleanup,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CleanupCommand` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `update_key`, `force_cleanup`, `get_stats`, `reset_stats`, and `stop` are never used
[INFO] [stdout]    --> src/ttl.rs:134:18
[INFO] [stdout]     |
[INFO] [stdout]  62 | impl TtlManager {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 134 |     pub async fn update_key(&self, key: String, ttl_seconds: Option<u64>) -> CacheResult<u64> {
[INFO] [stdout]     |                  ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 210 |     pub async fn force_cleanup(&self) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 217 |     pub async fn get_stats(&self) -> TtlStats {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 229 |     pub async fn reset_stats(&self) {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 236 |     pub async fn stop(&self) {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_expire_time` is never used
[INFO] [stdout]    --> src/ttl.rs:433:12
[INFO] [stdout]     |
[INFO] [stdout] 433 |     pub fn calculate_expire_time(ttl_seconds: u64) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_valid_expire_time` is never used
[INFO] [stdout]    --> src/ttl.rs:438:12
[INFO] [stdout]     |
[INFO] [stdout] 438 |     pub fn is_valid_expire_time(expire_time: u64) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `format_remaining_time` is never used
[INFO] [stdout]    --> src/ttl.rs:443:12
[INFO] [stdout]     |
[INFO] [stdout] 443 |     pub fn format_remaining_time(ttl_seconds: u64) -> String {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `CacheOptions`
[INFO] [stdout]  --> examples/test_l1_no_compression.rs:6:40
[INFO] [stdout]   |
[INFO] [stdout] 6 | use rat_memcache::{RatMemCacheBuilder, CacheOptions};
[INFO] [stdout]   |                                        ^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rat_memcache::RatMemCacheBuilder`
[INFO] [stdout]  --> tests/test_compression_architecture.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use rat_memcache::RatMemCacheBuilder;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `L1Config`, `LoggingConfig`, `PerformanceConfig`, and `TtlConfig`
[INFO] [stdout]  --> tests/test_compression_architecture.rs:6:28
[INFO] [stdout]   |
[INFO] [stdout] 6 | use rat_memcache::config::{L1Config, PerformanceConfig, TtlConfig, LoggingConfig};
[INFO] [stdout]   |                            ^^^^^^^^  ^^^^^^^^^^^^^^^^^  ^^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `bytes::Bytes`
[INFO] [stdout]  --> tests/test_compression_architecture.rs:7:5
[INFO] [stdout]   |
[INFO] [stdout] 7 | use bytes::Bytes;
[INFO] [stdout]   |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tempfile::TempDir`
[INFO] [stdout]  --> tests/test_compression_architecture.rs:8:5
[INFO] [stdout]   |
[INFO] [stdout] 8 | use tempfile::TempDir;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rat_memcache::RatMemCacheBuilder`
[INFO] [stdout]  --> tests/test_large_value.rs:2:5
[INFO] [stdout]   |
[INFO] [stdout] 2 | use rat_memcache::RatMemCacheBuilder;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `L1Config`, `LoggingConfig`, `PerformanceConfig`, and `TtlConfig`
[INFO] [stdout]  --> tests/test_large_value.rs:3:20
[INFO] [stdout]   |
[INFO] [stdout] 3 | use rat_memcache::{L1Config, PerformanceConfig, TtlConfig, LoggingConfig};
[INFO] [stdout]   |                    ^^^^^^^^  ^^^^^^^^^^^^^^^^^  ^^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rat_memcache::types::EvictionStrategy`
[INFO] [stdout]  --> tests/test_large_value.rs:4:5
[INFO] [stdout]   |
[INFO] [stdout] 4 | use rat_memcache::types::EvictionStrategy;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `tempfile::TempDir`
[INFO] [stdout]   --> tests/test_large_value.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout] 10 | use tempfile::TempDir;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `bytes::Bytes`
[INFO] [stdout]   --> tests/test_large_value.rs:11:5
[INFO] [stdout]    |
[INFO] [stdout] 11 | use bytes::Bytes;
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `CacheError`
[INFO] [stdout]  --> src/cache.rs:8:20
[INFO] [stdout]   |
[INFO] [stdout] 8 | use crate::error::{CacheError, CacheResult};
[INFO] [stdout]   |                    ^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `CacheLayer` and `CacheOperation`
[INFO] [stdout]   --> src/cache.rs:13:20
[INFO] [stdout]    |
[INFO] [stdout] 13 | use crate::types::{CacheLayer, CacheOperation};
[INFO] [stdout]    |                    ^^^^^^^^^^  ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `crate::cache_log`
[INFO] [stdout]   --> src/cache.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 14 | use crate::cache_log;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `interval`
[INFO] [stdout]   --> src/cache.rs:19:19
[INFO] [stdout]    |
[INFO] [stdout] 19 | use tokio::time::{interval, Duration};
[INFO] [stdout]    |                   ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `chrono`
[INFO] [stdout]  --> src/types.rs:5:5
[INFO] [stdout]   |
[INFO] [stdout] 5 | use chrono;
[INFO] [stdout]   |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `std::io::Write`
[INFO] [stdout]   --> src/logging.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | use std::io::Write;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `chrono::Local`
[INFO] [stdout]   --> src/logging.rs:19:5
[INFO] [stdout]    |
[INFO] [stdout] 19 | use chrono::Local;
[INFO] [stdout]    |     ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `Level`
[INFO] [stdout]   --> src/logging.rs:20:33
[INFO] [stdout]    |
[INFO] [stdout] 20 | use rat_logger::{LoggerBuilder, Level, LevelFilter, Logger};
[INFO] [stdout]    |                                 ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `Metadata` and `Record`
[INFO] [stdout]   --> src/logging.rs:21:26
[INFO] [stdout]    |
[INFO] [stdout] 21 | use rat_logger::config::{Record, Metadata};
[INFO] [stdout]    |                          ^^^^^^  ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `rat_logger::handler::term::TermConfig`
[INFO] [stdout]   --> src/logging.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 | use rat_logger::handler::term::TermConfig;
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `ColorConfig`, `FormatConfig`, and `LevelStyle`
[INFO] [stdout]   --> src/logging.rs:23:18
[INFO] [stdout]    |
[INFO] [stdout] 23 | use rat_logger::{FormatConfig, LevelStyle, ColorConfig};
[INFO] [stdout]    |                  ^^^^^^^^^^^^  ^^^^^^^^^^  ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused imports: `CacheLayer` and `CacheOperation`
[INFO] [stdout]  --> src/l1_cache.rs:9:50
[INFO] [stdout]   |
[INFO] [stdout] 9 | use crate::types::{CacheValue, EvictionStrategy, CacheLayer, CacheOperation};
[INFO] [stdout]   |                                                  ^^^^^^^^^^  ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused import: `CacheError`
[INFO] [stdout]  --> src/ttl.rs:6:20
[INFO] [stdout]   |
[INFO] [stdout] 6 | use crate::error::{CacheError, CacheResult};
[INFO] [stdout]   |                    ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: use of deprecated method `rat_logger::LoggerBuilder::init`: 请使用init_global_logger方法
[INFO] [stdout]    --> src/logging.rs:139:17
[INFO] [stdout]     |
[INFO] [stdout] 139 |         builder.init().map_err(|e| {
[INFO] [stdout]     |                 ^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(deprecated)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `l2_cache`
[INFO] [stdout]    --> src/cache.rs:225:13
[INFO] [stdout]     |
[INFO] [stdout] 225 |         let l2_cache: Option<()> = None;
[INFO] [stdout]     |             ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_l2_cache`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `start_time`
[INFO] [stdout]    --> src/cache.rs:253:13
[INFO] [stdout]     |
[INFO] [stdout] 253 |         let start_time = Instant::now();
[INFO] [stdout]     |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_start_time`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `start_time`
[INFO] [stdout]    --> src/l1_cache.rs:158:13
[INFO] [stdout]     |
[INFO] [stdout] 158 |         let start_time = Instant::now();
[INFO] [stdout]     |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_start_time`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `start_time`
[INFO] [stdout]   --> src/l1_cache.rs:91:13
[INFO] [stdout]    |
[INFO] [stdout] 91 |         let start_time = Instant::now();
[INFO] [stdout]    |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_start_time`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `start_time`
[INFO] [stdout]    --> src/cache.rs:309:13
[INFO] [stdout]     |
[INFO] [stdout] 309 |         let start_time = Instant::now();
[INFO] [stdout]     |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_start_time`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `start_time`
[INFO] [stdout]    --> src/l1_cache.rs:117:13
[INFO] [stdout]     |
[INFO] [stdout] 117 |         let start_time = Instant::now();
[INFO] [stdout]     |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_start_time`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `start_time`
[INFO] [stdout]    --> src/cache.rs:387:13
[INFO] [stdout]     |
[INFO] [stdout] 387 |         let start_time = Instant::now();
[INFO] [stdout]     |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_start_time`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `start_time`
[INFO] [stdout]    --> src/cache.rs:394:13
[INFO] [stdout]     |
[INFO] [stdout] 394 |         let start_time = Instant::now();
[INFO] [stdout]     |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_start_time`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `logging_config`
[INFO] [stdout]    --> src/l1_cache.rs:510:13
[INFO] [stdout]     |
[INFO] [stdout] 510 |         let logging_config = LoggingConfig {
[INFO] [stdout]     |             ^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_logging_config`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variable does not need to be mutable
[INFO] [stdout]    --> src/l1_cache.rs:591:13
[INFO] [stdout]     |
[INFO] [stdout] 591 |         let mut l1_config = L1Config {
[INFO] [stdout]     |             ----^^^^^^^^^
[INFO] [stdout]     |             |
[INFO] [stdout]     |             help: remove this `mut`
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unused variable: `logging_config`
[INFO] [stdout]    --> src/l1_cache.rs:597:13
[INFO] [stdout]     |
[INFO] [stdout] 597 |         let logging_config = LoggingConfig {
[INFO] [stdout]     |             ^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_logging_config`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: type `PendingSetOperation` is more private than the item `streaming_protocol::StreamingParser::check_set_complete`
[INFO] [stdout]    --> src/streaming_protocol.rs:120:5
[INFO] [stdout]     |
[INFO] [stdout] 120 |     pub fn check_set_complete(&mut self, key: &str) -> Option<(PendingSetOperation, Vec<u8>)> {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ method `streaming_protocol::StreamingParser::check_set_complete` is reachable at visibility `pub`
[INFO] [stdout]     |
[INFO] [stdout] note: but type `PendingSetOperation` is only usable at visibility `pub(self)`
[INFO] [stdout]    --> src/streaming_protocol.rs:44:1
[INFO] [stdout]     |
[INFO] [stdout]  44 | struct PendingSetOperation {
[INFO] [stdout]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: `#[warn(private_interfaces)]` on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `total_memory` is never read
[INFO] [stdout]    --> src/config.rs:509:5
[INFO] [stdout]     |
[INFO] [stdout] 508 | struct SystemInfo {
[INFO] [stdout]     |        ---------- field in this struct
[INFO] [stdout] 509 |     total_memory: u64,
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `recommended_l1_memory` and `recommended_worker_threads` are never used
[INFO] [stdout]    --> src/config.rs:528:8
[INFO] [stdout]     |
[INFO] [stdout] 514 | impl SystemInfo {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 528 |     fn recommended_l1_memory(&self) -> usize {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 535 |     fn recommended_worker_threads(&self) -> usize {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `PathUtils` is never constructed
[INFO] [stdout]    --> src/config.rs:542:8
[INFO] [stdout]     |
[INFO] [stdout] 542 | struct PathUtils;
[INFO] [stdout]     |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated functions `default_cache_dir` and `validate_writable_path` are never used
[INFO] [stdout]    --> src/config.rs:546:8
[INFO] [stdout]     |
[INFO] [stdout] 544 | impl PathUtils {
[INFO] [stdout]     | -------------- associated functions in this implementation
[INFO] [stdout] 545 |     /// 获取跨平台的默认缓存目录
[INFO] [stdout] 546 |     fn default_cache_dir() -> CacheResult<PathBuf> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 570 |     fn validate_writable_path(path: &PathBuf) -> CacheResult<()> {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `total_size`, `flags`, and `exptime` are never read
[INFO] [stdout]   --> src/streaming_protocol.rs:45:5
[INFO] [stdout]    |
[INFO] [stdout] 44 | struct PendingSetOperation {
[INFO] [stdout]    |        ------------------- fields in this struct
[INFO] [stdout] 45 |     total_size: usize,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 46 |     chunk_count: usize,
[INFO] [stdout] 47 |     flags: u32,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout] 48 |     exptime: u32,
[INFO] [stdout]    |     ^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PendingSetOperation` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `compression_ratio` is never read
[INFO] [stdout]   --> src/compression.rs:28:9
[INFO] [stdout]    |
[INFO] [stdout] 20 | pub struct CompressionResult {
[INFO] [stdout]    |            ----------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 28 |     pub compression_ratio: f64,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CompressionResult` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `size` is never read
[INFO] [stdout]   --> src/compression.rs:39:9
[INFO] [stdout]    |
[INFO] [stdout] 35 | pub struct DecompressionResult {
[INFO] [stdout]    |            ------------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 39 |     pub size: usize,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DecompressionResult` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `estimate_compressibility`, `config`, and `estimate_compressed_size` are never used
[INFO] [stdout]    --> src/compression.rs:167:8
[INFO] [stdout]     |
[INFO] [stdout]  42 | impl Compressor {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 167 |     fn estimate_compressibility(&self, data: &[u8]) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 222 |     pub fn config(&self) -> &L2Config {
[INFO] [stdout]     |            ^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 227 |     pub fn estimate_compressed_size(&self, original_size: usize) -> usize {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `total_decompressions`, `compression_failures`, and `decompression_failures` are never read
[INFO] [stdout]    --> src/compression.rs:251:9
[INFO] [stdout]     |
[INFO] [stdout] 247 | pub struct CompressionStats {
[INFO] [stdout]     |            ---------------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 251 |     pub total_decompressions: u64,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 259 |     pub compression_failures: u64,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 260 |     /// 解压缩失败次数
[INFO] [stdout] 261 |     pub decompression_failures: u64,
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `CompressionStats` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `record_decompression`, `record_compression_failure`, `record_decompression_failure`, `compression_success_rate`, `decompression_success_rate`, and `reset` are never used
[INFO] [stdout]    --> src/compression.rs:284:12
[INFO] [stdout]     |
[INFO] [stdout] 264 | impl CompressionStats {
[INFO] [stdout]     | --------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 284 |     pub fn record_decompression(&mut self, _size: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 289 |     pub fn record_compression_failure(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 294 |     pub fn record_decompression_failure(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 316 |     pub fn compression_success_rate(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 325 |     pub fn decompression_success_rate(&self) -> f64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 334 |     pub fn reset(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `compressor` is never read
[INFO] [stdout]   --> src/l1_cache.rs:30:5
[INFO] [stdout]    |
[INFO] [stdout] 23 | pub struct L1Cache {
[INFO] [stdout]    |            ------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 30 |     compressor: Arc<Compressor>,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `L1Cache` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `key` and `expire_time` are never read
[INFO] [stdout]   --> src/ttl.rs:34:14
[INFO] [stdout]    |
[INFO] [stdout] 34 |     AddKey { key: String, expire_time: u64 },
[INFO] [stdout]    |     ------   ^^^          ^^^^^^^^^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     fields in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CleanupCommand` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `key` is never read
[INFO] [stdout]   --> src/ttl.rs:36:17
[INFO] [stdout]    |
[INFO] [stdout] 36 |     RemoveKey { key: String },
[INFO] [stdout]    |     ---------   ^^^
[INFO] [stdout]    |     |
[INFO] [stdout]    |     field in this variant
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CleanupCommand` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `UpdateKey` and `ForceCleanup` are never constructed
[INFO] [stdout]   --> src/ttl.rs:38:5
[INFO] [stdout]    |
[INFO] [stdout] 32 | enum CleanupCommand {
[INFO] [stdout]    |      -------------- variants in this enum
[INFO] [stdout] ...
[INFO] [stdout] 38 |     UpdateKey { key: String, expire_time: u64 },
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] 39 |     /// 强制清理过期键
[INFO] [stdout] 40 |     ForceCleanup,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `CleanupCommand` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `force_cleanup`, `get_stats`, `reset_stats`, and `stop` are never used
[INFO] [stdout]    --> src/ttl.rs:210:18
[INFO] [stdout]     |
[INFO] [stdout]  62 | impl TtlManager {
[INFO] [stdout]     | --------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 210 |     pub async fn force_cleanup(&self) {
[INFO] [stdout]     |                  ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 217 |     pub async fn get_stats(&self) -> TtlStats {
[INFO] [stdout]     |                  ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 229 |     pub async fn reset_stats(&self) {
[INFO] [stdout]     |                  ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 236 |     pub async fn stop(&self) {
[INFO] [stdout]     |                  ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `calculate_expire_time` is never used
[INFO] [stdout]    --> src/ttl.rs:433:12
[INFO] [stdout]     |
[INFO] [stdout] 433 |     pub fn calculate_expire_time(ttl_seconds: u64) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_valid_expire_time` is never used
[INFO] [stdout]    --> src/ttl.rs:438:12
[INFO] [stdout]     |
[INFO] [stdout] 438 |     pub fn is_valid_expire_time(expire_time: u64) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 28.29s
[INFO] running `Command { std: "docker" "inspect" "2d9d856a61a731cef1b204ef8500fc107c9b117b70c0e7b01f443c314f8d611d", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "2d9d856a61a731cef1b204ef8500fc107c9b117b70c0e7b01f443c314f8d611d", kill_on_drop: false }`
[INFO] [stdout] 2d9d856a61a731cef1b204ef8500fc107c9b117b70c0e7b01f443c314f8d611d
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+1f7f8ea0721a3b1eb73e6c6d25cccb371434b320" "test" "--frozen", kill_on_drop: false }`
[INFO] [stdout] a54f67d93d1e748c49d04cb0f65240a9f519f4cb5b5ec8914598c9a471104792
[INFO] running `Command { std: "docker" "start" "-a" "a54f67d93d1e748c49d04cb0f65240a9f519f4cb5b5ec8914598c9a471104792", kill_on_drop: false }`
[INFO] [stderr] warning: unused import: `CacheError`
[INFO] [stderr]  --> src/cache.rs:8:20
[INFO] [stderr]   |
[INFO] [stderr] 8 | use crate::error::{CacheError, CacheResult};
[INFO] [stderr]   |                    ^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `CacheLayer` and `CacheOperation`
[INFO] [stderr]   --> src/cache.rs:13:20
[INFO] [stderr]    |
[INFO] [stderr] 13 | use crate::types::{CacheLayer, CacheOperation};
[INFO] [stderr]    |                    ^^^^^^^^^^  ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `crate::cache_log`
[INFO] [stderr]   --> src/cache.rs:14:5
[INFO] [stderr]    |
[INFO] [stderr] 14 | use crate::cache_log;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `interval`
[INFO] [stderr]   --> src/cache.rs:19:19
[INFO] [stderr]    |
[INFO] [stderr] 19 | use tokio::time::{interval, Duration};
[INFO] [stderr]    |                   ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `chrono`
[INFO] [stderr]  --> src/types.rs:5:5
[INFO] [stderr]   |
[INFO] [stderr] 5 | use chrono;
[INFO] [stderr]   |     ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `std::io::Write`
[INFO] [stderr]   --> src/logging.rs:18:5
[INFO] [stderr]    |
[INFO] [stderr] 18 | use std::io::Write;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `chrono::Local`
[INFO] [stderr]   --> src/logging.rs:19:5
[INFO] [stderr]    |
[INFO] [stderr] 19 | use chrono::Local;
[INFO] [stderr]    |     ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `Level`
[INFO] [stderr]   --> src/logging.rs:20:33
[INFO] [stderr]    |
[INFO] [stderr] 20 | use rat_logger::{LoggerBuilder, Level, LevelFilter, Logger};
[INFO] [stderr]    |                                 ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `Metadata` and `Record`
[INFO] [stderr]   --> src/logging.rs:21:26
[INFO] [stderr]    |
[INFO] [stderr] 21 | use rat_logger::config::{Record, Metadata};
[INFO] [stderr]    |                          ^^^^^^  ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `rat_logger::handler::term::TermConfig`
[INFO] [stderr]   --> src/logging.rs:22:5
[INFO] [stderr]    |
[INFO] [stderr] 22 | use rat_logger::handler::term::TermConfig;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `ColorConfig`, `FormatConfig`, and `LevelStyle`
[INFO] [stderr]   --> src/logging.rs:23:18
[INFO] [stderr]    |
[INFO] [stderr] 23 | use rat_logger::{FormatConfig, LevelStyle, ColorConfig};
[INFO] [stderr]    |                  ^^^^^^^^^^^^  ^^^^^^^^^^  ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `CacheLayer` and `CacheOperation`
[INFO] [stderr]  --> src/l1_cache.rs:9:50
[INFO] [stderr]   |
[INFO] [stderr] 9 | use crate::types::{CacheValue, EvictionStrategy, CacheLayer, CacheOperation};
[INFO] [stderr]   |                                                  ^^^^^^^^^^  ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `CacheError`
[INFO] [stderr]  --> src/ttl.rs:6:20
[INFO] [stderr]   |
[INFO] [stderr] 6 | use crate::error::{CacheError, CacheResult};
[INFO] [stderr]   |                    ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: use of deprecated method `rat_logger::LoggerBuilder::init`: 请使用init_global_logger方法
[INFO] [stderr]    --> src/logging.rs:139:17
[INFO] [stderr]     |
[INFO] [stderr] 139 |         builder.init().map_err(|e| {
[INFO] [stderr]     |                 ^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(deprecated)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `l2_cache`
[INFO] [stderr]    --> src/cache.rs:225:13
[INFO] [stderr]     |
[INFO] [stderr] 225 |         let l2_cache: Option<()> = None;
[INFO] [stderr]     |             ^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_l2_cache`
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(unused_variables)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `start_time`
[INFO] [stderr]    --> src/cache.rs:253:13
[INFO] [stderr]     |
[INFO] [stderr] 253 |         let start_time = Instant::now();
[INFO] [stderr]     |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_start_time`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `start_time`
[INFO] [stderr]    --> src/l1_cache.rs:158:13
[INFO] [stderr]     |
[INFO] [stderr] 158 |         let start_time = Instant::now();
[INFO] [stderr]     |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_start_time`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `start_time`
[INFO] [stderr]   --> src/l1_cache.rs:91:13
[INFO] [stderr]    |
[INFO] [stderr] 91 |         let start_time = Instant::now();
[INFO] [stderr]    |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_start_time`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `start_time`
[INFO] [stderr]    --> src/cache.rs:309:13
[INFO] [stderr]     |
[INFO] [stderr] 309 |         let start_time = Instant::now();
[INFO] [stderr]     |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_start_time`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `start_time`
[INFO] [stderr]    --> src/l1_cache.rs:117:13
[INFO] [stderr]     |
[INFO] [stderr] 117 |         let start_time = Instant::now();
[INFO] [stderr]     |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_start_time`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `start_time`
[INFO] [stderr]    --> src/cache.rs:387:13
[INFO] [stderr]     |
[INFO] [stderr] 387 |         let start_time = Instant::now();
[INFO] [stderr]     |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_start_time`
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `start_time`
[INFO] [stderr]    --> src/cache.rs:394:13
[INFO] [stderr]     |
[INFO] [stderr] 394 |         let start_time = Instant::now();
[INFO] [stderr]     |             ^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_start_time`
[INFO] [stderr] 
[INFO] [stderr] warning: type `PendingSetOperation` is more private than the item `StreamingParser::check_set_complete`
[INFO] [stderr]    --> src/streaming_protocol.rs:120:5
[INFO] [stderr]     |
[INFO] [stderr] 120 |     pub fn check_set_complete(&mut self, key: &str) -> Option<(PendingSetOperation, Vec<u8>)> {
[INFO] [stderr]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ method `StreamingParser::check_set_complete` is reachable at visibility `pub`
[INFO] [stderr]     |
[INFO] [stderr] note: but type `PendingSetOperation` is only usable at visibility `pub(self)`
[INFO] [stderr]    --> src/streaming_protocol.rs:44:1
[INFO] [stderr]     |
[INFO] [stderr]  44 | struct PendingSetOperation {
[INFO] [stderr]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     = note: `#[warn(private_interfaces)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: field `total_memory` is never read
[INFO] [stderr]    --> src/config.rs:509:5
[INFO] [stderr]     |
[INFO] [stderr] 508 | struct SystemInfo {
[INFO] [stderr]     |        ---------- field in this struct
[INFO] [stderr] 509 |     total_memory: u64,
[INFO] [stderr]     |     ^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: methods `recommended_l1_memory` and `recommended_worker_threads` are never used
[INFO] [stderr]    --> src/config.rs:528:8
[INFO] [stderr]     |
[INFO] [stderr] 514 | impl SystemInfo {
[INFO] [stderr]     | --------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 528 |     fn recommended_l1_memory(&self) -> usize {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 535 |     fn recommended_worker_threads(&self) -> usize {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `PathUtils` is never constructed
[INFO] [stderr]    --> src/config.rs:542:8
[INFO] [stderr]     |
[INFO] [stderr] 542 | struct PathUtils;
[INFO] [stderr]     |        ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated functions `default_cache_dir` and `validate_writable_path` are never used
[INFO] [stderr]    --> src/config.rs:546:8
[INFO] [stderr]     |
[INFO] [stderr] 544 | impl PathUtils {
[INFO] [stderr]     | -------------- associated functions in this implementation
[INFO] [stderr] 545 |     /// 获取跨平台的默认缓存目录
[INFO] [stderr] 546 |     fn default_cache_dir() -> CacheResult<PathBuf> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 570 |     fn validate_writable_path(path: &PathBuf) -> CacheResult<()> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `total_size`, `flags`, and `exptime` are never read
[INFO] [stderr]   --> src/streaming_protocol.rs:45:5
[INFO] [stderr]    |
[INFO] [stderr] 44 | struct PendingSetOperation {
[INFO] [stderr]    |        ------------------- fields in this struct
[INFO] [stderr] 45 |     total_size: usize,
[INFO] [stderr]    |     ^^^^^^^^^^
[INFO] [stderr] 46 |     chunk_count: usize,
[INFO] [stderr] 47 |     flags: u32,
[INFO] [stderr]    |     ^^^^^
[INFO] [stderr] 48 |     exptime: u32,
[INFO] [stderr]    |     ^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `PendingSetOperation` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: field `l2_config` is never read
[INFO] [stderr]   --> src/compression.rs:15:5
[INFO] [stderr]    |
[INFO] [stderr] 14 | pub struct Compressor {
[INFO] [stderr]    |            ---------- field in this struct
[INFO] [stderr] 15 |     l2_config: Arc<L2Config>,
[INFO] [stderr]    |     ^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `Compressor` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: struct `CompressionResult` is never constructed
[INFO] [stderr]   --> src/compression.rs:20:12
[INFO] [stderr]    |
[INFO] [stderr] 20 | pub struct CompressionResult {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `DecompressionResult` is never constructed
[INFO] [stderr]   --> src/compression.rs:35:12
[INFO] [stderr]    |
[INFO] [stderr] 35 | pub struct DecompressionResult {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple methods are never used
[INFO] [stderr]    --> src/compression.rs:85:12
[INFO] [stderr]     |
[INFO] [stderr]  42 | impl Compressor {
[INFO] [stderr]     | --------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr]  85 |     pub fn compress(&self, data: &[u8]) -> CacheResult<CompressionResult> {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 127 |     pub fn decompress(&self, compressed_data: &[u8], is_compressed: bool) -> CacheResult<DecompressionResult> {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 147 |     fn should_compress(&self, data: &[u8]) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 167 |     fn estimate_compressibility(&self, data: &[u8]) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 194 |     fn compress_lz4(&self, data: &[u8]) -> CacheResult<Vec<u8>> {
[INFO] [stderr]     |        ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 210 |     fn decompress_lz4(&self, compressed_data: &[u8]) -> CacheResult<Vec<u8>> {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 222 |     pub fn config(&self) -> &L2Config {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 227 |     pub fn estimate_compressed_size(&self, original_size: usize) -> usize {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `CompressionStats` is never constructed
[INFO] [stderr]    --> src/compression.rs:247:12
[INFO] [stderr]     |
[INFO] [stderr] 247 | pub struct CompressionStats {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> src/compression.rs:266:12
[INFO] [stderr]     |
[INFO] [stderr] 264 | impl CompressionStats {
[INFO] [stderr]     | --------------------- associated items in this implementation
[INFO] [stderr] 265 |     /// 创建新的统计信息
[INFO] [stderr] 266 |     pub fn new() -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 271 |     pub fn record_compression(&mut self, result: &CompressionResult) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 284 |     pub fn record_decompression(&mut self, _size: usize) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 289 |     pub fn record_compression_failure(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 294 |     pub fn record_decompression_failure(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 299 |     pub fn overall_compression_ratio(&self) -> f64 {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 307 |     pub fn bytes_saved(&self) -> u64 {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 316 |     pub fn compression_success_rate(&self) -> f64 {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 325 |     pub fn decompression_success_rate(&self) -> f64 {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 334 |     pub fn reset(&mut self) {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `compressor` is never read
[INFO] [stderr]   --> src/l1_cache.rs:30:5
[INFO] [stderr]    |
[INFO] [stderr] 23 | pub struct L1Cache {
[INFO] [stderr]    |            ------- field in this struct
[INFO] [stderr] ...
[INFO] [stderr] 30 |     compressor: Arc<Compressor>,
[INFO] [stderr]    |     ^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `L1Cache` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: methods `len` and `is_empty` are never used
[INFO] [stderr]    --> src/l1_cache.rs:216:12
[INFO] [stderr]     |
[INFO] [stderr]  61 | impl L1Cache {
[INFO] [stderr]     | ------------ methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 216 |     pub fn len(&self) -> usize {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 221 |     pub fn is_empty(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `key` and `expire_time` are never read
[INFO] [stderr]   --> src/ttl.rs:34:14
[INFO] [stderr]    |
[INFO] [stderr] 34 |     AddKey { key: String, expire_time: u64 },
[INFO] [stderr]    |     ------   ^^^          ^^^^^^^^^^^
[INFO] [stderr]    |     |
[INFO] [stderr]    |     fields in this variant
[INFO] [stderr]    |
[INFO] [stderr]    = note: `CleanupCommand` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: field `key` is never read
[INFO] [stderr]   --> src/ttl.rs:36:17
[INFO] [stderr]    |
[INFO] [stderr] 36 |     RemoveKey { key: String },
[INFO] [stderr]    |     ---------   ^^^
[INFO] [stderr]    |     |
[INFO] [stderr]    |     field in this variant
[INFO] [stderr]    |
[INFO] [stderr]    = note: `CleanupCommand` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: variants `UpdateKey` and `ForceCleanup` are never constructed
[INFO] [stderr]   --> src/ttl.rs:38:5
[INFO] [stderr]    |
[INFO] [stderr] 32 | enum CleanupCommand {
[INFO] [stderr]    |      -------------- variants in this enum
[INFO] [stderr] ...
[INFO] [stderr] 38 |     UpdateKey { key: String, expire_time: u64 },
[INFO] [stderr]    |     ^^^^^^^^^
[INFO] [stderr] 39 |     /// 强制清理过期键
[INFO] [stderr] 40 |     ForceCleanup,
[INFO] [stderr]    |     ^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `CleanupCommand` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: methods `update_key`, `force_cleanup`, `get_stats`, `reset_stats`, and `stop` are never used
[INFO] [stderr]    --> src/ttl.rs:134:18
[INFO] [stderr]     |
[INFO] [stderr]  62 | impl TtlManager {
[INFO] [stderr]     | --------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 134 |     pub async fn update_key(&self, key: String, ttl_seconds: Option<u64>) -> CacheResult<u64> {
[INFO] [stderr]     |                  ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 210 |     pub async fn force_cleanup(&self) {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 217 |     pub async fn get_stats(&self) -> TtlStats {
[INFO] [stderr]     |                  ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 229 |     pub async fn reset_stats(&self) {
[INFO] [stderr]     |                  ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 236 |     pub async fn stop(&self) {
[INFO] [stderr]     |                  ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `calculate_expire_time` is never used
[INFO] [stderr]    --> src/ttl.rs:433:12
[INFO] [stderr]     |
[INFO] [stderr] 433 |     pub fn calculate_expire_time(ttl_seconds: u64) -> u64 {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `is_valid_expire_time` is never used
[INFO] [stderr]    --> src/ttl.rs:438:12
[INFO] [stderr]     |
[INFO] [stderr] 438 |     pub fn is_valid_expire_time(expire_time: u64) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `format_remaining_time` is never used
[INFO] [stderr]    --> src/ttl.rs:443:12
[INFO] [stderr]     |
[INFO] [stderr] 443 |     pub fn format_remaining_time(ttl_seconds: u64) -> String {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: `rat_memcache` (lib) generated 43 warnings (run `cargo fix --lib -p rat_memcache` to apply 21 suggestions)
[INFO] [stderr] warning: unused import: `rat_memcache::RatMemCacheBuilder`
[INFO] [stderr]  --> tests/test_compression_architecture.rs:5:5
[INFO] [stderr]   |
[INFO] [stderr] 5 | use rat_memcache::RatMemCacheBuilder;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `L1Config`, `LoggingConfig`, `PerformanceConfig`, and `TtlConfig`
[INFO] [stderr]  --> tests/test_compression_architecture.rs:6:28
[INFO] [stderr]   |
[INFO] [stderr] 6 | use rat_memcache::config::{L1Config, PerformanceConfig, TtlConfig, LoggingConfig};
[INFO] [stderr]   |                            ^^^^^^^^  ^^^^^^^^^^^^^^^^^  ^^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `bytes::Bytes`
[INFO] [stderr]  --> tests/test_compression_architecture.rs:7:5
[INFO] [stderr]   |
[INFO] [stderr] 7 | use bytes::Bytes;
[INFO] [stderr]   |     ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tempfile::TempDir`
[INFO] [stderr]  --> tests/test_compression_architecture.rs:8:5
[INFO] [stderr]   |
[INFO] [stderr] 8 | use tempfile::TempDir;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `rat_memcache::RatMemCacheBuilder`
[INFO] [stderr]  --> tests/test_large_value.rs:2:5
[INFO] [stderr]   |
[INFO] [stderr] 2 | use rat_memcache::RatMemCacheBuilder;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused imports: `L1Config`, `LoggingConfig`, `PerformanceConfig`, and `TtlConfig`
[INFO] [stderr]  --> tests/test_large_value.rs:3:20
[INFO] [stderr]   |
[INFO] [stderr] 3 | use rat_memcache::{L1Config, PerformanceConfig, TtlConfig, LoggingConfig};
[INFO] [stderr]   |                    ^^^^^^^^  ^^^^^^^^^^^^^^^^^  ^^^^^^^^^  ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `rat_memcache::types::EvictionStrategy`
[INFO] [stderr]  --> tests/test_large_value.rs:4:5
[INFO] [stderr]   |
[INFO] [stderr] 4 | use rat_memcache::types::EvictionStrategy;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `tempfile::TempDir`
[INFO] [stderr]   --> tests/test_large_value.rs:10:5
[INFO] [stderr]    |
[INFO] [stderr] 10 | use tempfile::TempDir;
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `bytes::Bytes`
[INFO] [stderr]   --> tests/test_large_value.rs:11:5
[INFO] [stderr]    |
[INFO] [stderr] 11 | use bytes::Bytes;
[INFO] [stderr]    |     ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `logging_config`
[INFO] [stderr]    --> src/l1_cache.rs:510:13
[INFO] [stderr]     |
[INFO] [stderr] 510 |         let logging_config = LoggingConfig {
[INFO] [stderr]     |             ^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_logging_config`
[INFO] [stderr] 
[INFO] [stderr] warning: variable does not need to be mutable
[INFO] [stderr]    --> src/l1_cache.rs:591:13
[INFO] [stderr]     |
[INFO] [stderr] 591 |         let mut l1_config = L1Config {
[INFO] [stderr]     |             ----^^^^^^^^^
[INFO] [stderr]     |             |
[INFO] [stderr]     |             help: remove this `mut`
[INFO] [stderr]     |
[INFO] [stderr]     = note: `#[warn(unused_mut)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: unused variable: `logging_config`
[INFO] [stderr]    --> src/l1_cache.rs:597:13
[INFO] [stderr]     |
[INFO] [stderr] 597 |         let logging_config = LoggingConfig {
[INFO] [stderr]     |             ^^^^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_logging_config`
[INFO] [stderr] 
[INFO] [stderr] warning: type `PendingSetOperation` is more private than the item `streaming_protocol::StreamingParser::check_set_complete`
[INFO] [stderr]    --> src/streaming_protocol.rs:120:5
[INFO] [stderr]     |
[INFO] [stderr] 120 |     pub fn check_set_complete(&mut self, key: &str) -> Option<(PendingSetOperation, Vec<u8>)> {
[INFO] [stderr]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ method `streaming_protocol::StreamingParser::check_set_complete` is reachable at visibility `pub`
[INFO] [stderr]     |
[INFO] [stderr] note: but type `PendingSetOperation` is only usable at visibility `pub(self)`
[INFO] [stderr]    --> src/streaming_protocol.rs:44:1
[INFO] [stderr]     |
[INFO] [stderr]  44 | struct PendingSetOperation {
[INFO] [stderr]     | ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     = note: `#[warn(private_interfaces)]` on by default
[INFO] [stderr] 
[INFO] [stderr] warning: field `compression_ratio` is never read
[INFO] [stderr]   --> src/compression.rs:28:9
[INFO] [stderr]    |
[INFO] [stderr] 20 | pub struct CompressionResult {
[INFO] [stderr]    |            ----------------- field in this struct
[INFO] [stderr] ...
[INFO] [stderr] 28 |     pub compression_ratio: f64,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `CompressionResult` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: field `size` is never read
[INFO] [stderr]   --> src/compression.rs:39:9
[INFO] [stderr]    |
[INFO] [stderr] 35 | pub struct DecompressionResult {
[INFO] [stderr]    |            ------------------- field in this struct
[INFO] [stderr] ...
[INFO] [stderr] 39 |     pub size: usize,
[INFO] [stderr]    |         ^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `DecompressionResult` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: methods `estimate_compressibility`, `config`, and `estimate_compressed_size` are never used
[INFO] [stderr]    --> src/compression.rs:167:8
[INFO] [stderr]     |
[INFO] [stderr]  42 | impl Compressor {
[INFO] [stderr]     | --------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 167 |     fn estimate_compressibility(&self, data: &[u8]) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 222 |     pub fn config(&self) -> &L2Config {
[INFO] [stderr]     |            ^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 227 |     pub fn estimate_compressed_size(&self, original_size: usize) -> usize {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `total_decompressions`, `compression_failures`, and `decompression_failures` are never read
[INFO] [stderr]    --> src/compression.rs:251:9
[INFO] [stderr]     |
[INFO] [stderr] 247 | pub struct CompressionStats {
[INFO] [stderr]     |            ---------------- fields in this struct
[INFO] [stderr] ...
[INFO] [stderr] 251 |     pub total_decompressions: u64,
[INFO] [stderr]     |         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 259 |     pub compression_failures: u64,
[INFO] [stderr]     |         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 260 |     /// 解压缩失败次数
[INFO] [stderr] 261 |     pub decompression_failures: u64,
[INFO] [stderr]     |         ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `CompressionStats` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: methods `record_decompression`, `record_compression_failure`, `record_decompression_failure`, `compression_success_rate`, `decompression_success_rate`, and `reset` are never used
[INFO] [stderr]    --> src/compression.rs:284:12
[INFO] [stderr]     |
[INFO] [stderr] 264 | impl CompressionStats {
[INFO] [stderr]     | --------------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 284 |     pub fn record_decompression(&mut self, _size: usize) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 289 |     pub fn record_compression_failure(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 294 |     pub fn record_decompression_failure(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 316 |     pub fn compression_success_rate(&self) -> f64 {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 325 |     pub fn decompression_success_rate(&self) -> f64 {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 334 |     pub fn reset(&mut self) {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `force_cleanup`, `get_stats`, `reset_stats`, and `stop` are never used
[INFO] [stderr]    --> src/ttl.rs:210:18
[INFO] [stderr]     |
[INFO] [stderr]  62 | impl TtlManager {
[INFO] [stderr]     | --------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 210 |     pub async fn force_cleanup(&self) {
[INFO] [stderr]     |                  ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 217 |     pub async fn get_stats(&self) -> TtlStats {
[INFO] [stderr]     |                  ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 229 |     pub async fn reset_stats(&self) {
[INFO] [stderr]     |                  ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 236 |     pub async fn stop(&self) {
[INFO] [stderr]     |                  ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: unused import: `CacheOptions`
[INFO] [stderr]  --> examples/test_l1_no_compression.rs:6:40
[INFO] [stderr]   |
[INFO] [stderr] 6 | use rat_memcache::{RatMemCacheBuilder, CacheOptions};
[INFO] [stderr]   |                                        ^^^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: `rat_memcache` (test "test_compression_architecture") generated 4 warnings (run `cargo fix --test "test_compression_architecture" -p rat_memcache` to apply 4 suggestions)
[INFO] [stderr] warning: `rat_memcache` (test "test_large_value") generated 5 warnings (run `cargo fix --test "test_large_value" -p rat_memcache` to apply 5 suggestions)
[INFO] [stderr] warning: `rat_memcache` (lib test) generated 43 warnings (33 duplicates) (run `cargo fix --lib -p rat_memcache --tests` to apply 3 suggestions)
[INFO] [stderr] warning: `rat_memcache` (example "test_l1_no_compression") generated 1 warning (run `cargo fix --example "test_l1_no_compression" -p rat_memcache` to apply 1 suggestion)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.31s
[INFO] [stderr]      Running unittests src/lib.rs (/opt/rustwide/target/debug/deps/rat_memcache-3d873d678a969cc5)
[INFO] [stdout] 
[INFO] [stdout] running 18 tests
[INFO] [stdout] test compression::tests::test_compress_small_data ... ok
[INFO] [stdout] test compression::tests::test_compress_decompress_roundtrip ... ok
[INFO] [stdout] test l1_cache::tests::test_delete ... ok
[INFO] [stdout] test l1_cache::tests::test_clear ... ok
[INFO] [stdout] test compression::tests::test_compression_stats ... ok
[INFO] [stdout] test streaming_protocol::tests::test_parse_set_begin ... ok
[INFO] [stdout] test streaming_protocol::tests::test_parse_streaming_get ... ok
[INFO] [stdout] test l1_cache::tests::test_set_and_get ... ok
[INFO] [stdout] test streaming_protocol::tests::test_formatter ... ok
[INFO] [stdout] test compression::tests::test_compress_large_data ... ok
[INFO] [stdout] test ttl::tests::test_add_and_get_ttl ... ok
[INFO] [stdout] test ttl::tests::test_format_remaining_time ... ok
[INFO] [stdout] test ttl::tests::test_remove_key ... ok
[INFO] [stdout] test l1_cache::tests::test_cache_creation ... ok
[INFO] [stdout] test l1_cache::tests::test_eviction ... ok
[INFO] [stdout] test ttl::tests::test_ttl_manager_creation ... ok
[INFO] [stdout] test ttl::tests::test_update_key ... ok
[INFO] [stdout] test ttl::tests::test_key_expiration ... ok
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 18 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 2.51s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/test_compression_architecture.rs (/opt/rustwide/target/debug/deps/test_compression_architecture-dc7144a52ca70797)
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]      Running tests/test_large_value.rs (/opt/rustwide/target/debug/deps/test_large_value-bd16c4ce446a6c4a)
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] [stderr]    Doc-tests rat_memcache
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "a54f67d93d1e748c49d04cb0f65240a9f519f4cb5b5ec8914598c9a471104792", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "a54f67d93d1e748c49d04cb0f65240a9f519f4cb5b5ec8914598c9a471104792", kill_on_drop: false }`
[INFO] [stdout] a54f67d93d1e748c49d04cb0f65240a9f519f4cb5b5ec8914598c9a471104792
